home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Speccy ClassiX 1998
/
Speccy ClassiX 98.iso
/
amiga_system
/
the_aminet
/
util
/
cli
/
iconalign.lha
/
IconAlign
/
IconAlign.mod
< prev
next >
Wrap
Text File
|
1995-09-10
|
4KB
|
128 lines
(*
(****** IconAlign/--AMOK-Header-- *******************************************
:Program. IconAlign.mod
:Contents. arranges Workbench icons orderly
:Author. Oliver Knorr
:Copyright. Public Domain
:Language. Oberon-2
:Translator. Amiga Oberon v3.11
:History. v1.0 [olk] 10-Sep-95
:Version. $VER: IconAlign.mod 1.0 (10.9.95)
*****************************************************************************
*
*)
*)
MODULE IconAlign;
IMPORT
Dos, Workbench, Icon, io, NoGuru;
TYPE
Args = STRUCT (as: Dos.ArgsStruct)
from : Dos.ArgString;
to : Dos.ArgStringArray;
horizontal : Dos.ArgBool;
vertical : Dos.ArgBool;
distance : Dos.ArgLong;
END;
CONST
template = "FROM/A,TO/A/M,HORIZONTAL/S,VERTICAL/S,DISTANCE/N";
verString = "$VER: IconAlign 1.0 (10.9.95) by Oliver Knorr";
VAR
rdArgs : Dos.RDArgsPtr;
args : Args;
fromIcon,
toIcon : Workbench.DiskObjectPtr;
toIndex : INTEGER;
nextPos : LONGINT;
BEGIN
IF verString[0]="$" THEN END; (* the version string shouldn't be optimized away *)
IF Dos.base.lib.version >= 37 THEN
IF Icon.base.version >= 36 THEN
rdArgs := Dos.ReadArgs (template, args, NIL);
IF (rdArgs # NIL) THEN
IF ((args.horizontal = Dos.DOSTRUE) & (args.vertical = Dos.DOSFALSE))
OR ((args.horizontal = Dos.DOSFALSE) & (args.vertical = Dos.DOSTRUE)) THEN
fromIcon := Icon.GetDiskObject(args.from^);
IF (fromIcon # NIL) THEN
toIndex := 0;
IF (args.distance # NIL) THEN
IF (args.horizontal = Dos.DOSTRUE) THEN
nextPos := fromIcon.currentX + fromIcon.gadget.width + args.distance[0] + 8
ELSE
nextPos := fromIcon.currentY + fromIcon.gadget.height + args.distance[0] + 5
END
END;
WHILE args.to[toIndex] # NIL DO
toIcon := Icon.GetDiskObject(args.to[toIndex]^);
IF (toIcon # NIL) THEN
IF (args.horizontal = Dos.DOSTRUE) THEN
toIcon.currentY := fromIcon.currentY + fromIcon.gadget.height - toIcon.gadget.height;
IF (args.distance # NIL) THEN
toIcon.currentX := nextPos;
INC(nextPos, toIcon.gadget.width+args.distance[0]+8)
END
ELSE
toIcon.currentX := fromIcon.currentX + ENTIER((fromIcon.gadget.width-toIcon.gadget.width)/2);
IF (args.distance # NIL) THEN
toIcon.currentY := nextPos;
INC(nextPos, toIcon.gadget.height+args.distance[0]+5)
END
END;
IF ~Icon.PutDiskObject(args.to[toIndex]^, toIcon) THEN
io.WriteString("could not write TO icon ");
io.WriteString(args.to[toIndex]^); io.WriteLn
END;
Icon.FreeDiskObject(toIcon)
ELSE
io.WriteString("could not read TO icon ");
io.WriteString(args.to[toIndex]^); io.WriteLn
END;
INC(toIndex)
END;
Icon.FreeDiskObject(fromIcon)
ELSE
io.WriteString("could not read FROM icon"); io.WriteLn
END;
Dos.FreeArgs(rdArgs)
ELSE
io.WriteString("use exactly one of HORIZONTAL/S and VERTICAL/S"); io.WriteLn
END
ELSE
io.WriteString("wrong arguments"); io.WriteLn
END
ELSE
io.WriteString("requires icon.library V36"); io.WriteLn
END
ELSE
io.WriteString("requires dos.library V37"); io.WriteLn
END
END IconAlign.